package bean;

public interface BeanDefinition {
    String SCOPE_SINGLETION = "singleton";

    String SCOPE_PROTOTYPE = "prototype";

    /**
     * 类
     */
    Class<?> getBeanClass();

    /**
     * Scope
     */
    String getScope();
    void setScope(String scope);
    /**
     * 是否单例
     */
    boolean isSingleton();

    /**
     * 是否原型
     */
    boolean isPrototype();

    /**
     * 工厂bean名
     */
    String getFactoryBeanName();

    /**
     * 工厂方法名
     */
    String getFactoryMethodName();

    /**
     * 初始化方法
     */
    String getInitMethodName();

    /**
     * 销毁方法
     */
    String getDestroyMethodName();

    boolean isPrimary();

    /**
     * 校验bean定义的合法性
     */
    default boolean validate() {

        if (this.getBeanClass() == null) {
            if (isBlank(getFactoryBeanName()) || isBlank(getFactoryMethodName())) {
                return false;
            }
        }
        if (this.getBeanClass().isInterface()) {
            System.err.println("bean class can't is a interface");
            return false;
        }
        if (this.getBeanClass() != null && !isBlank(getFactoryBeanName())) {
            return false;
        }

        return true;
    }

    // 判空辅助方法
    default boolean isBlank(String str) {
        return str == null || str.trim().isEmpty();
    }
}
